package org.eiahe.hr.attendance.service;

import org.eiahe.hr.attendance.domain.bo.EmployeeShiftBo;
import org.eiahe.hr.attendance.domain.vo.EmployeeShiftVo;
import org.eiahe.hr.attendance.domain.vo.ShiftVo;
import org.ehe.common.mybatis.core.page.PageQuery;
import org.ehe.common.mybatis.core.page.TableDataInfo;

import java.time.LocalDate;
import java.util.Collection;
import java.util.List;

/**
 * 员工-班次关联服务接口
 *
 * @author zhangnn
 */
public interface IEmployeeShiftService {

    /**
     * 查询员工班次关联
     *
     * @param id 主键ID
     * @return 员工班次关联信息
     */
    EmployeeShiftVo queryById(Long id);

    /**
     * 查询员工班次关联列表
     *
     * @param bo 员工班次关联业务对象
     * @return 员工班次关联列表
     */
    List<EmployeeShiftVo> queryList(EmployeeShiftBo bo);

    /**
     * 分页查询员工班次关联列表
     *
     * @param bo        员工班次关联业务对象
     * @param pageQuery 分页参数
     * @return 员工班次关联分页列表
     */
    TableDataInfo<EmployeeShiftVo> queryPageList(EmployeeShiftBo bo, PageQuery pageQuery);

    /**
     * 新增员工班次关联
     *
     * @param bo 员工班次关联业务对象
     * @return 是否成功
     */
    Boolean insertByBo(EmployeeShiftBo bo);

    /**
     * 修改员工班次关联
     *
     * @param bo 员工班次关联业务对象
     * @return 是否成功
     */
    Boolean updateByBo(EmployeeShiftBo bo);

    /**
     * 批量删除员工班次关联
     *
     * @param ids 主键ID集合
     * @return 是否成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids);

    /**
     * 批量分配班次给员工
     *
     * @param employeeNos   员工工号列表
     * @param shiftId       班次ID
     * @param effectiveDate 生效日期
     * @param expiryDate    失效日期
     * @return 是否成功
     */
    Boolean batchAssignShift(List<String> employeeNos, Long shiftId, LocalDate effectiveDate, LocalDate expiryDate);

    /**
     * 查询员工当前生效的班次
     *
     * @param employeeNo 员工工号
     * @param date       查询日期
     * @return 班次信息
     */
    ShiftVo queryEmployeeCurrentShift(String employeeNo, LocalDate date);
}
